/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package componentes;

import DTO.Concurso;
import DTO.Usuario;
import com.sun.xml.registry.uddi.infomodel.ConceptImpl;
import java.util.Date;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import tipos.ConcursoStatus;
import tipos.ConcursoTipo;
import tipos.UsuarioStatus;

/**
 *
 * @author acazares
 */
@ManagedBean
@RequestScoped
public class ConcursosBean {
    
    private DTO.Concurso concurso;
    private DAO.ConcursoDAO dao;
    private HttpServletRequest request;
    private FacesContext context;
    private HttpSession httpSession;
    private boolean esNuevo = false;
    private String vista;

    public ConcursosBean() {
        try{
            dao = new DAO.ConcursoDAO();

            context = FacesContext.getCurrentInstance();
            request = (HttpServletRequest) FacesContext.getCurrentInstance().
                    getExternalContext().getRequest();  
            httpSession = request.getSession(false);  

            String id = request.getParameter("id");  
            vista = (String)request.getParameter("vista"); 

            if(id!=null && id.length()>0){
                //DAO.UtilDao dao1 = new DAO.UtilDao( tipos.ComponentesNombre.Concurso );
                //System.out.println("Solicitando datos...");
                //concurso = (Concurso)dao1.getById(id);

                concurso = dao.getConcursoById(id);
                System.out.println("Salida: ");
                System.out.println(concurso.toString());
                concurso.setId(id);
                esNuevo = false;
            }else{            
                concurso = new DTO.Concurso();            
                esNuevo = true;
            }     
        }catch(Exception e){
            System.out.println("Error: "+e);
        }
    }
    public void setVista(String vista){        
        this.vista = vista;
    }
    public String getVista(){     
        if(vista!=null && vista.equals("crear")){
            System.out.println("Set vista");
            return this.vista="elementos/concursos/nuevo.xhtml";
        }
        /*
         * else{
            System.out.println("Nada???"+vista);
            //this.vista=vista;
            return this.vista="elementos/concursos/nuevo1.xhtml";
        }    
        //return vista;*/
        return this.vista="elementos/concursos/default.xhtml";
    }
    /*
    public String getVistaLL(){     
        if(vista!=null && vista.equals("crear")){
            System.out.println("Ingresando");
            return "elementos/concursos/nuevo.xhtml";
        }else{
            System.out.println("Nada???");
        }
        /*   
        if(vista!=null){
            if(vista.equals("crear")) return "elementos/concursos/nuevo.xhtml";
        }
        return "elementos/concursos/usuarios.xhtml";
        //return "elementos/concursos/nuevo.xhtml";
    }*/
    
    public boolean getEsNuevo(){        
        return esNuevo;
        //return true;
    }
    
    
    
    public String guardar(){        
        try{    
            DTO.Concurso concurso = dao.getConcursoById(this.concurso.getId());
                System.out.println("Formulario: "+this.concurso.getNombre() +
                        "Objeto: "+concurso.getNombre());
            //falta validar los datos
            if(concurso.getId()==null){
                System.out.println("Guardando datos");
                dao = new DAO.ConcursoDAO();

                this.concurso.setTipoInscripcion(ConcursoTipo.publico);
                this.concurso.setStatus(ConcursoStatus.nuevo);

                DTO.Usuario usr = (DTO.Usuario)httpSession.getAttribute("usuario");
                this.concurso.setAutor(usr);

                System.out.println("objeto construido, administrado por "+usr.getNombre());                                
                dao.guardar(this.concurso);                            
                System.out.println("Datos almacenados");   
                return "index";
            }else{
                //falta validar los datos
                
                concurso.setConvocatoria(this.concurso.getConvocatoria());
                concurso.setFinaliza(this.concurso.getFinaliza());
                concurso.setInicia(this.concurso.getInicia());
                concurso.setNombre(this.concurso.getNombre());
                concurso.setPublicidadFin(this.concurso.getPublicidadFin());
                concurso.setPublicidadInicio(this.concurso.getPublicidadInicio());
                //concurso.setStatus(this.concurso.getStatus());
                //concurso.setTipoInscripcion(this.concurso.getTipoInscripcion());
                dao.update(concurso);
                System.out.println("objeto actualizado, administrado por "+concurso.getAutor());
                System.out.println("Detalles:"+ concurso.getNombre());
                return "index";
            }
        }catch(Exception e){
            System.out.println("Error: "+e);
            return "crear";
        }        
    }
    
    
    private SelectItem[] concursosTipo = new SelectItem[]{
        new SelectItem(
            tipos.ConcursoTipo.publico, tipos.ConcursoTipo.publico.toString()
        ),
        new SelectItem(
            tipos.ConcursoTipo.privado, tipos.ConcursoTipo.privado.toString()
        ),
        new SelectItem(
            tipos.ConcursoTipo.bloqueado, tipos.ConcursoTipo.bloqueado.toString()
        )
    };
    public SelectItem[] getTipos(){
        return concursosTipo;
    }
    
    
    private SelectItem[] concursosStatus = new SelectItem[]{
        new SelectItem(
            tipos.ConcursoStatus.nuevo, tipos.ConcursoStatus.nuevo.toString()
        ),
        new SelectItem(
            tipos.ConcursoStatus.iniciado, tipos.ConcursoStatus.iniciado.toString()
        ),
        new SelectItem(
            tipos.ConcursoStatus.pausado, tipos.ConcursoStatus.pausado.toString()
        ),
        new SelectItem(
            tipos.ConcursoStatus.finalizado, tipos.ConcursoStatus.finalizado.toString()
        )
    };
    public SelectItem[] getStatusConcursos(){
        return concursosStatus;
    }
    
    public String msgNombre, msgInicio, msgFinaliza, msgAutor, msgStatus, 
            msgTipoInscripcion, msgPublicidadInicio, msgPublicidadFin;
    public void setId(String id){
        concurso.setId(id);
    }
    public void setNombre(String nombre){
        concurso.setNombre(nombre);
    }
    public void setInicia(Date inicia){
        concurso.setInicia(inicia);
    }
    public void setFinaliza(Date finaliza){
        concurso.setFinaliza(finaliza);
    }
    public void setAutor(DTO.Usuario autor){
        concurso.setAutor(autor);
    }
    public void setStatus(tipos.ConcursoStatus status){
        concurso.setStatus(status);
    }
    public void setTipoInscripcion(tipos.ConcursoTipo tipo){
        concurso.setTipoInscripcion(tipo);
    }
    public void setConvocatoria(String convocatoria){
        concurso.setConvocatoria(convocatoria);
    }
    public void setPublicidadInicio(Date publicidadInicio){
        concurso.setPublicidadInicio(publicidadInicio);
    }
    public void setPublicidadFin(Date publicidadFin){
        concurso.setPublicidadFin(publicidadFin);
    }
    
    
    public String getId(){
        return concurso.getId();
    }
    public String getNombre(){
        return concurso.getNombre();
    }
    public Date getInicia(){
        return concurso.getInicia();
    }
    public Date getFinaliza(){
        return concurso.getFinaliza();
    }
    public DTO.Usuario getAutor(){
        DAO.UsuarioDAO dao = new DAO.UsuarioDAO();
        return dao.getUsuarioById(concurso.getAutor());
        //return concurso.getAutor();
    }
    public tipos.ConcursoStatus getStatus(){
        return concurso.getStatus();
    }
    public tipos.ConcursoTipo getTipoInscripcion(){
        return concurso.getTipoInscripcion();
    }
    public String getConvocatoria(){
        return concurso.getConvocatoria();
    }
    public Date getPublicidadInicio(){
        return concurso.getPublicidadInicio();
    }
    public Date getPublicidadFin(){
        return concurso.getPublicidadFin();
    }
    
    
  
    
}




